import os

import yaml


class YamlUtil:
    """
    本类用于处理YAML文件的数据加载和处理。
    它通过读取指定的YAML文件，将内容加载到内存中以便后续处理。
    """
    def read_extract_yaml(self, key):
        """
        读取并解析 YAML 文件。

        参数:
        file_path (str): YAML 文件的完整路径。

        返回:
        dict: 加载后的 YAML 数据。

        异常:
        FileNotFoundError: 如果指定的 YAML 文件不存在。
        yaml.YAMLError: 如果 YAML 文件内容格式不正确。
        """
        full_path = ""
        try:
            # 使用 pathlib 或 os.path.join 构建跨平台兼容的文件路径
            full_path = os.path.join(os.getcwd(), "common\yml\extract.yml")
            with open(full_path, 'r', encoding='utf-8') as file:
                # 使用 yaml.FullLoader 安全地加载 YAML 文件内容
                return yaml.load(file, Loader=yaml.FullLoader)[key]
        except FileNotFoundError:
            # 捕获文件不存在的异常，并提供友好的错误提示
            raise FileNotFoundError(f"YAML 文件未找到: {full_path}")
        except yaml.YAMLError as e:
            # 捕获 YAML 格式错误的异常，并提供详细的错误信息
            raise ValueError(f"YAML 文件格式错误: {e}")
    def write_extract_yaml(self, data):
        """
        将 extract.yaml 文件的内容读取并以 YAML 格式返回。

        此函数尝试打开当前工作目录下的 yaml/extract.yaml 文件，
        安全地加载其内容，并以 YAML 格式返回。如果文件不存在或格式错误，
        将抛出相应的异常。

        Raises:
            FileNotFoundError: 如果 YAML 文件未找到。
            ValueError: 如果 YAML 文件格式错误。
        """
        full_path = ""
        try:
            # 使用 pathlib 或 os.path.join 构建跨平台兼容的文件路径
            full_path = os.path.join(os.getcwd(), "common\yml\extract.yml")
            with open(full_path, 'a', encoding='utf-8') as file:
                # 使用 yaml.FullLoader 安全地加载 YAML 文件内容
                yaml.dump(data=data, stream=file, allow_unicode=True)
        except FileNotFoundError:
            # 捕获文件不存在的异常，并提供友好的错误提示
            raise FileNotFoundError(f"YAML 文件未找到: {full_path}")
        except yaml.YAMLError as e:
            # 捕获 YAML 格式错误的异常，并提供详细的错误信息
            raise ValueError(f"YAML 文件格式错误: {e}")
    def clear_extract_yaml(self):
        """
        清除 extract.yaml 文件的内容。
        """
        # 使用 pathlib 或 os.path.join 构建跨平台兼容的文件路径
        full_path = os.path.join(os.getcwd(), "common\yml\extract.yml")
        with open(full_path, 'w', encoding='utf-8') as file:
            # 使用 yaml.FullLoader 安全地加载 YAML 文件内容
            file.truncate()


    # 读取测试用例yml文件
    # def read_testcase_yaml(self, yaml_name):
    #     full_path = ""
    #     try:
    #         # 使用 pathlib 或 os.path.join 构建跨平台兼容的文件路径
    #         full_path = os.path.join(os.getcwd(), ".\configs\\"+yaml_name)
    #         print(full_path)
    #         with open(full_path, 'r', encoding='utf-8') as file:
    #             # 使用 yaml.FullLoader 安全地加载 YAML 文件内容
    #             return yaml.load(file, Loader=yaml.FullLoader)
    #     except FileNotFoundError:
    #         # 捕获文件不存在的异常，并提供友好的错误提示
    #         raise FileNotFoundError(f"YAML 文件未找到: {full_path}")
    #     except yaml.YAMLError as e:
    #         # 捕获 YAML 格式错误的异常，并提供详细的错误信息
    #         raise ValueError(f"YAML 文件格式错误: {e}")